use std::collections::HashMap;
use std::fmt;
use std::hash;
-use std::slice;
+use std::iter;
use std::path::{Path, PathBuf};
+use std::slice;
use semver::Version;
use core::{Dependency, Manifest, PackageId, SourceId, Target};
}
}
- pub fn packages(&self) -> slice::Iter<Package> {
- self.packages.iter()
+ pub fn package_ids(&self) -> iter::Map<slice::Iter<Package>,
+ fn(&Package) -> &PackageId> {
+ let f = Package::package_id as fn(&Package) -> &PackageId;
+ self.packages.iter().map(f)
+ }
+
+ pub fn get(&self, id: &PackageId) -> &Package {
+ self.packages.iter().find(|pkg| pkg.package_id() == id).unwrap()
}
pub fn sources(&self) -> &SourceMap<'cfg> {
for spec in opts.spec {
// Translate the spec to a Package
let pkgid = try!(resolve.query(spec));
- let pkg = packages.packages().find(|p| p.package_id() == pkgid).unwrap();
+ let pkg = packages.get(&pkgid);
// And finally, clean everything out!
for target in pkg.targets() {
invalid_spec.join(", "))
}
- let to_builds = packages.packages()
- .filter(|p| pkgids.contains(&p.package_id()))
- .collect::<Vec<_>>();
+ let to_builds = pkgids.iter().map(|id| packages.get(id)).collect::<Vec<_>>();
let mut general_targets = Vec::new();
let mut package_targets = Vec::new();
opt.no_default_features));
let (packages, resolve) = deps;
+ let packages = packages.package_ids()
+ .map(|i| packages.get(i))
+ .cloned()
+ .collect();
+
Ok(ExportInfo {
- packages: packages.packages().cloned().collect(),
+ packages: packages,
resolve: Some(MetadataResolve(resolve)),
version: VERSION,
})
/// Gets a package for the given package id.
pub fn get_package(&self, id: &PackageId) -> &'a Package {
- self.packages.packages()
- .find(|pkg| id == pkg.package_id())
- .expect("Should have found package")
+ self.packages.get(id)
}
/// Get the user-specified linker for a particular host or target
}).collect::<Vec<_>>();
let dest = if build_config.release {"release"} else {"debug"};
- let root = packages.packages().find(|p| {
- p.package_id() == resolve.root()
- }).unwrap();
+ let root = packages.get(resolve.root());
let host_layout = Layout::new(config, root, None, &dest);
let target_layout = build_config.requested_target.as_ref().map(|target| {
layout::Layout::new(config, root, Some(&target), &dest)